package com.fiberhome.nas.core.network.di

import com.fiberhome.nas.core.network.service.AlbumService
import com.fiberhome.nas.core.network.service.AuthService
import com.fiberhome.nas.core.network.service.CommonService
import com.fiberhome.nas.core.network.service.PageService
import com.fiberhome.nas.core.network.service.PhotoService
import com.fiberhome.nas.core.network.service.UserInfoService
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import retrofit2.Retrofit
import javax.inject.Singleton

/**
 * 服务模块，提供所有网络服务接口的依赖注入
 * 为Hilt提供各种网络服务接口的实例
 */
@Module
@InstallIn(SingletonComponent::class)
object ServiceModule {

    /**
     * 提供页面相关服务接口
     *
     * @param retrofit Retrofit实例
     * @return 页面服务接口实现
     */
    @Provides
    @Singleton
    fun providePageService(retrofit: Retrofit): PageService {
        return retrofit.create(PageService::class.java)
    }

    /**
     * 提供认证相关服务接口
     *
     * @param retrofit Retrofit实例
     * @return 认证服务接口实现
     */
    @Provides
    @Singleton
    fun provideAuthService(retrofit: Retrofit): AuthService {
        return retrofit.create(AuthService::class.java)
    }

    /**
     * 提供用户信息相关服务接口
     *
     * @param retrofit Retrofit实例
     * @return 用户信息服务接口实现
     */
    @Provides
    @Singleton
    fun provideUserInfoService(retrofit: Retrofit): UserInfoService {
        return retrofit.create(UserInfoService::class.java)
    }

    /**
     * 提供通用基础服务接口
     *
     * @param retrofit Retrofit实例
     * @return 通用基础服务接口实现
     */
    @Provides
    @Singleton
    fun provideCommonService(retrofit: Retrofit): CommonService {
        return retrofit.create(CommonService::class.java)
    }

    /**
     * 提供照片相关服务接口
     *
     * @param retrofit Retrofit实例
     * @return 照片服务接口实现
     */
    @Provides
    @Singleton
    fun providePhotoService(retrofit: Retrofit): PhotoService {
        return retrofit.create(PhotoService::class.java)
    }

    /**
     * 提供相册相关服务接口
     *
     * @param retrofit Retrofit实例
     * @return 相册服务接口实现
     */
    @Provides
    @Singleton
    fun provideAlbumService(retrofit: Retrofit): AlbumService {
        return retrofit.create(AlbumService::class.java)
    }

}